package com.ybkj.o2o.mc.service;


import com.ybkj.o2o.mc.entity.PassengerGrade;

import java.util.List;

/**
 * Created by shine on 15/8/19.
 */
public interface PassengerGradeService {
  /**
   * 保存等级信息.
   *
   * @param grade 等级信息
   * @return 受影响行数
   */
  int insert(PassengerGrade grade);

  /**
   * 根据主键与appkey更新等级信息.
   *
   * @param grade 等级信息
   * @return 受影响行数
   */
  int update(PassengerGrade grade);

  /**
   * 根据主键查询等级信息.
   *
   * @param gradeId 等级主键
   * @param appKey  系统key
   * @return 等级信息
   */
  PassengerGrade fetch(Long gradeId, Long companyId, String appKey);

  /**
   * 根据主键与系统key删除等级信息.
   *
   * @param gradeId 等级主键
   * @param appKey  系统key
   * @return 受影响的函数
   */
  int delete(Long gradeId, String appKey);

  /**
   * 根据等级名称与系统key查询等级信息.
   *
   * @param name   等级名称
   * @param appKey 系统key
   * @return 等级信息
   */
  PassengerGrade findByNameAndAppKey(String name, String appKey);

  Long countByNameAndAppKey(String name,Long companyId, String appKey);
  
  /**
   * 根据appKey查询所有等级.
   *
   * @param appKey 系统key
   * @return 等级信息列表
   */
  List<PassengerGrade> findByAppKey(String appKey);


  /**
   * 查询默认等级.
   *
   * @param appKey 系统key
   * @return 等级信息
   */
  PassengerGrade findDefault(Long companyId,String appKey);

  /**
   * 分页查询所有等级信息并且按id降序排列.
   *
   * @param offset 偏移量
   * @param rows   每页显示数量
   * @return 等级信息列表
   */
  List<PassengerGrade> findAll(int offset, int rows);

  /**
   * 统计所有等级信息数量.
   *
   * @return 总记录数
   */
  long count();

  /**
   * 根据公司id和appKey查询默认 .
   * @param companyId   公司id
   * @param appKey  区分系统
   * @return PassengerGrade
   */
  PassengerGrade findDefaultByCompanyId(Long companyId, String appKey);

  /**
   * 修改指定公司默认等级 .
   * @param defaultGrade   默认等级
   * @param id  等级id
   * @param companyId   公司id
   * @param appKey  区分系统
   * @return int
   */
  int updateDefaultGrade(boolean defaultGrade, Long id, Long companyId, String appKey);
  
  /**
   * 根据等级名称和公司id查询等级 .
   * @param name    等级名称
   * @param companyId 公司id
   * @param appKey  区分系统
   * @return PassengerGrade
   */
  PassengerGrade findByNameAndCompanyId(String name, Long companyId, String appKey);

  /**
   * 根据公司id查询客户等级 .
   * @param companyId   公司id
   * @param appKey      区分系统
   */
  List<PassengerGrade> findByCompany(Long companyId, String appKey);

  int updateCompanyName(Long companyId,String abbreviation, String appKey);

  PassengerGrade findByIdAndAppKey(Long gradeId, String appKey);
}
